package org.insightech.er; import java.io.File; import org.eclipse.core.runtime.IPath; import org.eclipse.core.runtime.IStatus; import org.eclipse.core.runtime.Status; import org.eclipse.draw2d.FigureCanvas; import org.eclipse.draw2d.Graphics; import org.eclipse.draw2d.IFigure; import org.eclipse.draw2d.SWTGraphics; import org.eclipse.draw2d.geometry.Rectangle; import org.eclipse.gef.EditPart; import org.eclipse.gef.GraphicalViewer; import org.eclipse.gef.LayerConstants; import org.eclipse.gef.editparts.LayerManager; import org.eclipse.gef.editparts.ScalableFreeformRootEditPart; import org.eclipse.gef.ui.parts.ScrollingGraphicalViewer; import org.eclipse.jface.dialogs.ErrorDialog; import org.eclipse.jface.resource.ImageDescriptor; import org.eclipse.jface.resource.ImageRegistry; import org.eclipse.jface.window.Window; import org.eclipse.swt.SWT; import org.eclipse.swt.graphics.GC; import org.eclipse.swt.graphics.Image; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Control; import org.eclipse.swt.widgets.DirectoryDialog; import org.eclipse.swt.widgets.Display; import org.eclipse.swt.widgets.FileDialog; import org.eclipse.swt.widgets.MessageBox; import org.eclipse.swt.widgets.Shell; import org.eclipse.ui.PlatformUI; import org.eclipse.ui.plugin.AbstractUIPlugin; import org.insightech.er.editor.controller.editpart.element.ERDiagramEditPartFactory; import org.insightech.er.editor.controller.editpart.element.PagableFreeformRootEditPart; import org.insightech.er.editor.model.ERDiagram; import org.insightech.er.editor.view.action.dbexport.ExportToImageAction; import org.insightech.er.util.Format; import org.osgi.framework.BundleContext; /** * The activator class controls the plug-in life cycle */ public class Activator extends AbstractUIPlugin { // The plug-in ID public static final String PLUGIN_ID = "org.insightech.er"; // The shared instance private static Activator plugin; /** * The constructor */ public Activator() { plugin = this; } @Override public void stop(BundleContext context) throws Exception { Resources.PINK.dispose(); Resources.ADDED_COLOR.dispose(); Resources.UPDATED_COLOR.dispose(); Resources.REMOVED_COLOR.dispose(); Resources.GRID_COLOR.dispose(); Resources.DEFAULT_TABLE_COLOR.dispose(); Resources.SELECTED_REFERENCED_COLUMN.dispose(); Resources.SELECTED_FOREIGNKEY_COLUMN.dispose(); Resources.SELECTED_REFERENCED_AND_FOREIGNKEY_COLUMN.dispose(); Resources.VERY_LIGHT_GRAY.dispose(); Resources.LINE_COLOR.dispose(); Resources.TEST_COLOR.dispose(); Resources.NOT_NULL_COLOR.dispose(); Resources.PRIMARY_COLOR.dispose(); Resources.FOREIGN_COLOR.dispose(); Resources.disposeColorMap(); plugin = null; super.stop(context); } /** * Returns the shared instance * * @return the shared instance */ public static Activator getDefault() { return plugin; } /** * Returns an image descriptor for the image file at the given plug-in * relative path * * @param path * the path * @return the image descriptor */ private static ImageDescriptor loadImageDescriptor(String path) { return imageDescriptorFromPlugin(PLUGIN_ID, path); } @Override protected void initializeImageRegistry(ImageRegistry reg) { super.initializeImageRegistry(reg); reg.put(ImageKey.ALIGN_BOTTOM, loadImageDescriptor("icons/alignbottom.gif")); reg.put(ImageKey.ALIGN_CENTER, loadImageDescriptor("icons/aligncenter.gif")); reg .put(ImageKey.ALIGN_LEFT, loadImageDescriptor("icons/alignleft.gif")); reg.put(ImageKey.ALIGN_MIDDLE, loadImageDescriptor("icons/alignmid.gif")); reg.put(ImageKey.ALIGN_RIGHT, loadImageDescriptor("icons/alignright.gif")); reg.put(ImageKey.ALIGN_TOP, loadImageDescriptor("icons/aligntop.gif")); reg.put(ImageKey.ARROW, loadImageDescriptor("icons/arrow16.gif")); reg.put(ImageKey.BLANK_WHITE, loadImageDescriptor("icons/blank_white.gif")); reg.put(ImageKey.CATEGORY, loadImageDescriptor("icons/category.gif")); reg.put(ImageKey.CHANGE_BACKGROUND_COLOR, loadImageDescriptor("icons/color.gif")); reg.put(ImageKey.CHANGE_BACKGROUND_COLOR_DISABLED, loadImageDescriptor("icons/square.gif")); reg.put(ImageKey.CHECK, loadImageDescriptor("icons/tick.png")); reg.put(ImageKey.CHECK_GREY, loadImageDescriptor("icons/tick_grey.png")); reg.put(ImageKey.COMMENT_CONNECTION, loadImageDescriptor("icons/comment_connection.gif")); reg.put(ImageKey.DATABASE, loadImageDescriptor("icons/database2.png")); reg.put(ImageKey.DATABASE_CONNECT, loadImageDescriptor("icons/database_connect.png")); reg.put(ImageKey.DICTIONARY, loadImageDescriptor("icons/dictionary.gif")); reg.put(ImageKey.DICTIONARY_OPEN, loadImageDescriptor("icons/dictionary_open.gif")); reg.put(ImageKey.EDIT, loadImageDescriptor("icons/pencil.png")); reg.put(ImageKey.ERROR, loadImageDescriptor("icons/error.gif")); reg.put(ImageKey.EXPORT_DDL, loadImageDescriptor("icons/document-attribute-d.png")); reg.put(ImageKey.EXPORT_TO_CSV, loadImageDescriptor("icons/document-excel-csv.png")); reg.put(ImageKey.EXPORT_TO_DB, loadImageDescriptor("icons/database_connect.png")); reg.put(ImageKey.EXPORT_TO_EXCEL, loadImageDescriptor("icons/document-excel.png")); reg.put(ImageKey.EXPORT_TO_HTML, loadImageDescriptor("icons/document-globe.png")); reg.put(ImageKey.EXPORT_TO_IMAGE, loadImageDescriptor("icons/document-image.png")); reg.put(ImageKey.EXPORT_TO_JAVA, loadImageDescriptor("icons/page_white_cup.png")); reg.put(ImageKey.EXPORT_TO_TEST_DATA, loadImageDescriptor("icons/tables--arrow.png")); reg.put(ImageKey.FIND, loadImageDescriptor("icons/binocular.png")); reg.put(ImageKey.FOREIGN_KEY, loadImageDescriptor("icons/foreign_key.gif")); reg.put(ImageKey.NON_NULL, loadImageDescriptor("icons/non_null.gif")); reg.put(ImageKey.GRID, loadImageDescriptor("icons/grid.png")); reg.put(ImageKey.GRID_SNAP, loadImageDescriptor("icons/grid-snap.png")); reg.put(ImageKey.GROUP, loadImageDescriptor("icons/group.gif")); reg.put(ImageKey.HORIZONTAL_LINE, loadImageDescriptor("icons/horizontal_line.gif")); reg.put(ImageKey.HORIZONTAL_LINE_DISABLED, loadImageDescriptor("icons/horizontal_line_disabled.gif")); reg.put(ImageKey.IMAGE, loadImageDescriptor("icons/image--plus.png")); reg.put(ImageKey.INDEX, loadImageDescriptor("icons/index.gif")); reg.put(ImageKey.LOCK_EDIT, loadImageDescriptor("icons/lock--pencil.png")); reg.put(ImageKey.MATCH_HEIGHT, loadImageDescriptor("icons/matchheight.gif")); reg.put(ImageKey.MATCH_WIDTH, loadImageDescriptor("icons/matchwidth.gif")); reg.put(ImageKey.NOTE, loadImageDescriptor("icons/note.gif")); reg.put(ImageKey.OPTION, loadImageDescriptor("icons/wrench.png")); reg.put(ImageKey.PAGE_SETTING_H, loadImageDescriptor("images/h.png")); reg.put(ImageKey.PAGE_SETTING_V, loadImageDescriptor("images/v.png")); reg.put(ImageKey.PALETTE, loadImageDescriptor("icons/palette.png")); reg.put(ImageKey.PRIMARY_KEY, loadImageDescriptor("icons/pkey.gif")); reg.put(ImageKey.RELATION_1_N, loadImageDescriptor("icons/relation_1_n.gif")); reg.put(ImageKey.RELATION_N_N, loadImageDescriptor("icons/relation_n_n.gif")); reg.put(ImageKey.RELATION_SELF, loadImageDescriptor("icons/relation_self.gif")); reg.put(ImageKey.RESIZE, loadImageDescriptor("icons/application-resize-actual.png")); reg.put(ImageKey.SEQUENCE, loadImageDescriptor("icons/sequence.gif")); reg.put(ImageKey.TITLEBAR_BACKGROUND, loadImageDescriptor("images/aqua-bg.gif")); reg.put(ImageKey.TABLE, loadImageDescriptor("icons/table.gif")); reg.put(ImageKey.TABLE_NEW, loadImageDescriptor("icons/table_new.gif")); reg.put(ImageKey.TABLESPACE, loadImageDescriptor("icons/database.png")); reg.put(ImageKey.TEST_DATA, loadImageDescriptor("icons/tables--pencil.png")); reg.put(ImageKey.TOOLTIP, loadImageDescriptor("icons/ui-tooltip.png")); reg.put(ImageKey.MAIN_COLUMN, loadImageDescriptor("icons/ui-main-column.png")); reg.put(ImageKey.TRIGGER, loadImageDescriptor("icons/arrow-turn-000-left.png")); reg.put(ImageKey.VERTICAL_LINE, loadImageDescriptor("icons/vertical_line.gif")); reg.put(ImageKey.VERTICAL_LINE_DISABLED, loadImageDescriptor("icons/vertical_line_disabled.gif")); reg.put(ImageKey.VIEW, loadImageDescriptor("icons/view.gif")); reg.put(ImageKey.WORD, loadImageDescriptor("icons/word_3.gif")); reg.put(ImageKey.ZOOM_IN, loadImageDescriptor("icons/magnifier-zoom.png")); reg.put(ImageKey.ZOOM_OUT, loadImageDescriptor("icons/magnifier-zoom-out.png")); reg.put(ImageKey.ZOOM_ADJUST, loadImageDescriptor("icons/magnifier-zoom-actual.png")); reg.put(ImageKey.DIAGRAM, loadImageDescriptor("icons/diagram.png")); reg.put(ImageKey.EDIT_EXCEL, loadImageDescriptor("icons/edit_excel.png")); } /** * �w�肳�ꂽ�L�[�ɑΉ����� {@link Image} ��Ԃ��܂� * * @param key * {@link ImageKey} �Œ�`���ꂽ�L�[ * @return �w�肳�ꂽ�L�[�ɑΉ����� {@link Image} */ public static Image getImage(String key) { return getDefault().getImageRegistry().get(key); } /** * �w�肳�ꂽ�L�[�ɑΉ����� {@link ImageDescriptor} ��Ԃ��܂� * * @param key * {@link ImageKey} �Œ�`���ꂽ�L�[ * @return �w�肳�ꂽ�L�[�ɑΉ����� {@link ImageDescriptor} */ public static ImageDescriptor getImageDescriptor(String key) { return getDefault().getImageRegistry().getDescriptor(key); } /** * �w�肳�ꂽ��O�̗�O�_�C�A���O��\�����܂��B * * @param e * ��O */ public static void showExceptionDialog(Throwable e) { IStatus status = new Status(IStatus.ERROR, Activator.PLUGIN_ID, 0, e .toString(), e); Activator.log(e); ErrorDialog.openError(PlatformUI.getWorkbench() .getActiveWorkbenchWindow().getShell(), ResourceString .getResourceString("dialog.title.error"), ResourceString .getResourceString("error.plugin.error.message"), status); } /** * �w�肳�ꂽ���b�Z�[�W�̃G���[�_�C�A���O��\�����܂��B * * @param message * �G���[���b�Z�[�W */ public static void showErrorDialog(String message) { MessageBox messageBox = new MessageBox(PlatformUI.getWorkbench() .getActiveWorkbenchWindow().getShell(), SWT.ICON_ERROR | SWT.OK); messageBox.setText(ResourceString .getResourceString("dialog.title.error")); messageBox.setMessage(ResourceString.getResourceString(message)); messageBox.open(); } /** * ���b�Z�[�W�_�C�A���O��\�����܂��B * * @param message * ���b�Z�[�W */ public static void showMessageDialog(String message) { MessageBox messageBox = new MessageBox(PlatformUI.getWorkbench() .getActiveWorkbenchWindow().getShell(), SWT.ICON_INFORMATION | SWT.OK); messageBox.setText(ResourceString .getResourceString("dialog.title.information")); messageBox.setMessage(ResourceString.getResourceString(Format .null2blank(message))); messageBox.open(); } /** * �m�F�_�C�A���O��\�����܂��B * * @param message * ���b�Z�[�W */ public static boolean showConfirmDialog(String message) { return showConfirmDialog(message, SWT.OK, SWT.CANCEL); } /** * �m�F�_�C�A���O��\�����܂��B * * @param message * ���b�Z�[�W */ public static boolean showConfirmDialog(String message, int ok, int cancel) { MessageBox messageBox = new MessageBox(PlatformUI.getWorkbench() .getActiveWorkbenchWindow().getShell(), SWT.ICON_INFORMATION | ok | cancel); messageBox.setText(ResourceString .getResourceString("dialog.title.confirm")); messageBox.setMessage(ResourceString.getResourceString(message)); int result = messageBox.open(); if (result == ok) { return true; } return false; } /** * �ۑ��_�C�A���O��\�����܂� * * @param filePath * �f�t�H���g�̃t�@�C���p�X * @param filterExtensions * �g���q * @return �ۑ��_�C�A���O�őI�����ꂽ�t�@�C���̃p�X */ public static String showSaveDialog(String filePath, String[] filterExtensions) { String dir = null; String fileName = null; if (filePath != null && !"".equals(filePath.trim())) { File file = new File(filePath.trim()); dir = file.getParent(); fileName = file.getName(); } FileDialog fileDialog = new FileDialog(PlatformUI.getWorkbench() .getActiveWorkbenchWindow().getShell(), SWT.SAVE); fileDialog.setFilterPath(dir); fileDialog.setFileName(fileName); fileDialog.setFilterExtensions(filterExtensions); return fileDialog.open(); } public static String showSaveDialogInternal(String filePath, String[] filterExtensions) { InternalFileDialog fileDialog = new InternalFileDialog(PlatformUI.getWorkbench() .getActiveWorkbenchWindow().getShell(), filePath, filterExtensions[0].substring(1)); if (fileDialog.open() == Window.OK) { IPath path = fileDialog.getResourcePath(); return path.toString(); } return null; } public static String showDirectoryDialogInternal(String filePath) { InternalDirectoryDialog fileDialog = new InternalDirectoryDialog(PlatformUI.getWorkbench() .getActiveWorkbenchWindow().getShell(), filePath); if (fileDialog.open() == Window.OK) { IPath path = fileDialog.getResourcePath(); return path.toString(); } return null; } /** * �f�B���N�g���I���_�C�A���O��\�����܂� * * @param filePath * �f�t�H���g�̃t�@�C���p�X * @return �f�B���N�g���I���_�C�A���O�őI�����ꂽ�f�B���N�g���̃p�X */ public static String showDirectoryDialog(String filePath) { String fileName = null; if (filePath != null && !"".equals(filePath.trim())) { File file = new File(filePath.trim()); fileName = file.getPath(); } DirectoryDialog dialog = new DirectoryDialog(PlatformUI.getWorkbench() .getActiveWorkbenchWindow().getShell(), SWT.NONE); dialog.setFilterPath(fileName); return dialog.open(); } public static void log(Throwable e) { e.printStackTrace(); Activator.getDefault().getLog().log( new Status(IStatus.ERROR, Activator.PLUGIN_ID, 0, e .getMessage(), e)); } private static class GraphicalViewerCreator implements Runnable { private Display display; private ERDiagram diagram; private GraphicalViewer viewer; private GraphicalViewerCreator(Display display, ERDiagram diagram) { this.display = display; this.diagram = diagram; } public void run() { Shell shell = new Shell(display); shell.setLayout(new GridLayout(1, false)); ERDiagramEditPartFactory editPartFactory = new ERDiagramEditPartFactory(); viewer = new ScrollingGraphicalViewer(); viewer.setControl(new FigureCanvas(shell)); ScalableFreeformRootEditPart rootEditPart = new PagableFreeformRootEditPart( diagram); viewer.setRootEditPart(rootEditPart); viewer.setEditPartFactory(editPartFactory); viewer.setContents(diagram); } } public static GraphicalViewer createGraphicalViewer(final ERDiagram diagram) { Display display = PlatformUI.getWorkbench().getDisplay(); GraphicalViewerCreator runnable = new GraphicalViewerCreator(display, diagram); display.syncExec(runnable); return runnable.viewer; } private static class ImageCreator implements Runnable { private GraphicalViewer viewer; private Image img = null; private ImageCreator(GraphicalViewer viewer) { this.viewer = viewer; } public void run() { GC figureCanvasGC = null; GC imageGC = null; try { ScalableFreeformRootEditPart rootEditPart = (ScalableFreeformRootEditPart) viewer .getRootEditPart(); rootEditPart.refresh(); IFigure rootFigure = ((LayerManager) rootEditPart) .getLayer(LayerConstants.PRINTABLE_LAYERS); EditPart editPart = viewer.getContents(); editPart.refresh(); ERDiagram diagram = (ERDiagram) editPart.getModel(); Rectangle rootFigureBounds = ExportToImageAction.getBounds( diagram, rootEditPart, rootFigure.getBounds()); Control figureCanvas = viewer.getControl(); figureCanvasGC = new GC(figureCanvas); img = new Image(Display.getCurrent(), rootFigureBounds.width + 20, rootFigureBounds.height + 20); imageGC = new GC(img); imageGC.setBackground(figureCanvasGC.getBackground()); imageGC.setForeground(figureCanvasGC.getForeground()); imageGC.setFont(figureCanvasGC.getFont()); imageGC.setLineStyle(figureCanvasGC.getLineStyle()); imageGC.setLineWidth(figureCanvasGC.getLineWidth()); imageGC.setAntialias(SWT.OFF); // imageGC.setInterpolation(SWT.HIGH); Graphics imgGraphics = new SWTGraphics(imageGC); imgGraphics.setBackgroundColor(figureCanvas.getBackground()); imgGraphics.fillRectangle(0, 0, rootFigureBounds.width + 20, rootFigureBounds.height + 20); imgGraphics.translate(ExportToImageAction .translateX(rootFigureBounds.x), ExportToImageAction .translateY(rootFigureBounds.y)); rootFigure.paint(imgGraphics); } finally { if (figureCanvasGC != null) { figureCanvasGC.dispose(); } if (imageGC != null) { imageGC.dispose(); } } } } public static Image createImage(GraphicalViewer viewer) { Display display = PlatformUI.getWorkbench().getDisplay(); ImageCreator runnable = new ImageCreator(viewer); display.syncExec(runnable); return runnable.img; } }